package com.dbapp;

import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Collections;

/**
 * @description:代码生成器
 * @author: weiyi.liu
 * @date: 2023-05-15 14:57
 */
public class MybatisPlusGenerator {
    //mysql
//    private final static String dbUrl="jdbc:mysql://localhost:3306/pig?useUnicode=true&useSSL=false&characterEncoding=utf8";
    //postgresql
    private final static String dbUrl="jdbc:postgresql://10.100.14.59:30432/ds-system-mgr?useUnicode=true&useSSL=false&characterEncoding=utf8";
    private final static String username="postgres";
    private final static String password="1qazcde35tgb";
    private final static String author="weiyi.liu"; //设置作者
    private final static String tables="t_login_user,t_role";//设置需要生成的表名 多个以逗号隔开
    private final static String packageName="com.dbapp";//设置包名
    public static void main(String[] args) {
        Assert.notBlank(dbUrl,"dbUrl is null");
        Assert.notBlank(username,"username is null");
        Assert.notBlank(password,"password is null");
        Assert.notBlank(tables,"tables is null");
        FastAutoGenerator.create(dbUrl, username, password)
                .globalConfig(builder -> {
                    builder.author(author)
                            .enableSwagger() // 开启 swagger 模式
                            .dateType(DateType.TIME_PACK)
//                            .fileOverride() // 覆盖已生成文件
                            .outputDir(System.getProperty("user.dir")+"/src/main/java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent(packageName) // 设置父包名
//                            .moduleName("system") // 设置父包模块名
//                            .entity("model")
//                            .service("service")//设置自定义service路径,不设置就是默认路径
//                            .controller("controller")
//                            .mapper("mapper")                                           // Mapper 包名
//                            .xml("mapper")
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") +"/src/main/resources/mapper/")); // 设置mapperXml生成路径
                })
                //策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(tables.split(","))    // 设置需要生成的表名
                            .addTablePrefix("t_", "c_")
                            // 设置自动填充的时间字段
                            .entityBuilder().addTableFills(
                                    new Column("create_time", FieldFill.INSERT),new Column("update_time", FieldFill.INSERT_UPDATE))
                    ; // 设置过滤表前缀

                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
